home *** CD-ROM | disk | FTP | other *** search
/ AmigActive 10 / AACD 10.iso / AACD / Resources / Sound / AHI / Developer / support / Source / ScanAudioModes / ScanAudioModes.c next >
C/C++ Source or Header  |  1996-05-21  |  6KB  |  170 lines

  1.  
  2. /* Shows the current Audio database in memory */
  3.  
  4. #include <utility/tagitem.h>
  5. #include <dos/dos.h>
  6. #include <devices/ahi.h>
  7. #include <proto/exec.h>
  8. #include <proto/dos.h>
  9. #include <proto/ahi.h>
  10. #include <stdlib.h>
  11.  
  12. #define LEN 80
  13.  
  14. LONG __OSlibversion=37;
  15.  
  16. UBYTE vers[] = "\0$VER: ScanAudioModes 1.1 (28.4.96)";
  17.  
  18. struct Library    *AHIBase;
  19. struct MsgPort    *AHImp=NULL;
  20. struct AHIRequest *AHIio=NULL;
  21. BYTE               AHIDevice=-1;
  22.  
  23. void cleanup(LONG rc)
  24. {
  25.   if(!AHIDevice)
  26.     CloseDevice((struct IORequest *)AHIio);
  27.   DeleteIORequest((struct IORequest *)AHIio);
  28.   DeleteMsgPort(AHImp);
  29.   exit(rc);
  30. }
  31.  
  32. LONG main(void)
  33. {
  34.   ULONG id=AHI_INVALID_ID;
  35.   LONG volume,stereo,panning,hifi,pingpong,record,realtime,fullduplex,
  36.        bits,channels,minmix,maxmix,freqs,inputs,outputs;
  37.   Fixed minmon,maxmon,mingain,maxgain,minout,maxout;
  38.   UBYTE name[LEN],driver[LEN],author[LEN],copyright[LEN],version[LEN],anno[LEN],
  39.         inputdesc[LEN],outputdesc[LEN];
  40.   LONG i;
  41.  
  42.   if(AHImp=CreateMsgPort())
  43.     if(AHIio=(struct AHIRequest *)CreateIORequest(AHImp,sizeof(struct AHIRequest))) {
  44.       AHIio->ahir_Version=1;
  45.       AHIDevice=OpenDevice(AHINAME,AHI_NO_UNIT,(struct IORequest *)AHIio,NULL);
  46.       }
  47.  
  48.   if(AHIDevice) {
  49.     Printf("Unable to open %s version 1\n",AHINAME);
  50.     cleanup(RETURN_FAIL);
  51.   }
  52.   AHIBase=(struct Library *)AHIio->ahir_Std.io_Device;
  53.  
  54.   while ((id=AHI_NextAudioID(id)) != AHI_INVALID_ID) {
  55.     if(SetSignal(0L,SIGBREAKF_CTRL_C) & SIGBREAKF_CTRL_C)
  56.     {
  57.       Printf("***Break\n");
  58.       break;
  59.     }
  60.  
  61. // Clear all 
  62.     volume=0;stereo=0;panning=0;hifi=0;pingpong=0;record=0;realtime=0;fullduplex=0;
  63.     bits=0;channels=0;minmix=0;maxmix=0;freqs=0;inputs=0;outputs=0;
  64.     name[0]='\0'; driver[0]='\0'; author[0]='\0'; copyright[0]='\0'; version[0]='\0';
  65.     anno[0]='\0'; inputdesc[0]='\0'; outputdesc[0]='\0';
  66.  
  67.     Printf("\x1b[2mMode 0x%08lx\x1b[0m\n",id);
  68.     AHI_GetAudioAttrs(id, NULL,
  69.                           AHIDB_BufferLen,LEN,
  70.                           AHIDB_Frequencies,&freqs,
  71.                           AHIDB_Volume, &volume,
  72.                           AHIDB_Stereo, &stereo,
  73.                           AHIDB_Panning, &panning,
  74.                           AHIDB_HiFi,&hifi,
  75.                           AHIDB_PingPong,&pingpong,
  76.                           AHIDB_Record,&record,
  77.                           AHIDB_FullDuplex,&fullduplex,
  78.                           AHIDB_Realtime,&realtime,
  79.                           AHIDB_Name,&name,
  80.                           AHIDB_Driver,&driver,
  81.                           AHIDB_Bits,&bits,
  82.                           AHIDB_MaxChannels,&channels,
  83.                           AHIDB_MinMixFreq,&minmix,
  84.                           AHIDB_MaxMixFreq,&maxmix,
  85.                           AHIDB_Author,&author,
  86.                           AHIDB_Copyright,©right,
  87.                           AHIDB_Version,&version,
  88.                           AHIDB_Annotation,&anno,
  89.                           AHIDB_MinMonitorVolume,&minmon,
  90.                           AHIDB_MaxMonitorVolume,&maxmon,
  91.                           AHIDB_MinInputGain,&mingain,
  92.                           AHIDB_MaxInputGain,&maxgain,
  93.                           AHIDB_MinOutputVolume,&minout,
  94.                           AHIDB_MaxOutputVolume,&maxout,
  95.                           AHIDB_Inputs,&inputs,
  96.                           AHIDB_Outputs,&outputs,
  97.                           TAG_DONE);
  98.     Printf(" Name: \"%s\"   Driver: \"DEVS:AHI/%s.audio\"\n",name,driver);
  99.     if(author[0])
  100.       Printf(" Driver programmed by: %s\n",author);
  101.     if(copyright[0])
  102.       Printf(" Copyright: %s\n",copyright);
  103.     for(i=0;i<LEN;i++)
  104.       if(version[i]=='\n' || version[i]=='\r')
  105.         version[i]='\0';
  106.     if(version[0])
  107.       Printf(" Version: %s\n",version);
  108.     if(anno[0])
  109.       Printf(" %s\n",anno);
  110.     Printf(" The hardware has %ld output(s)",outputs);
  111.     if(outputs>0)
  112.     {
  113.       Printf(":");
  114.       for(i=0;i<outputs;i++)
  115.       {
  116.         AHI_GetAudioAttrs(id, NULL,
  117.             AHIDB_BufferLen,LEN,
  118.             AHIDB_OutputArg,i,
  119.             AHIDB_Output,&outputdesc);
  120.         Printf(" %s",&outputdesc);
  121.       }
  122.     }
  123.     Printf("\n and %ld input(s)",inputs);
  124.     if(inputs>0)
  125.     {
  126.       Printf(":");
  127.       for(i=0;i<inputs;i++)
  128.       {
  129.         AHI_GetAudioAttrs(id, NULL,
  130.             AHIDB_BufferLen,LEN,
  131.             AHIDB_InputArg,i,
  132.             AHIDB_Input,&inputdesc);
  133.         Printf(" %s",&inputdesc);
  134.       }
  135.     }
  136.     Printf(".\n");
  137.     if(minmon==maxmon)
  138.       Printf(" No input monitor.\n");
  139.     else
  140.       Printf(" Input monitor volume range: %ld-%ld%%.\n",minmon*100>>16,maxmon*100>>16);
  141.     if(mingain==maxgain)
  142.       Printf(" No input gain.\n");
  143.     else
  144.       Printf(" Input gain range: %ld-%ld%%.\n",mingain*100>>16,maxgain*100>>16);
  145.     if(minout==maxout)
  146.       Printf(" No volume control.\n");
  147.     else
  148.       Printf(" Output volume range: %ld-%ld%%.\n",minout*100>>16,maxout*100>>16);
  149.  
  150.     Printf("\n %s output%s in %ld bits.\n", stereo ? "Stereo" : "Mono",
  151.               stereo ? (panning ? " (with panning)" : "" ) : "",
  152.               bits);
  153.     Printf(" Can play samples on max %ld channels at %s, %s.\n", channels,
  154.               volume ? "any volume" : "full volume only",
  155.               pingpong ? "both forwards and backwards" : "forwards only");
  156.     Printf(" The mixing %sdestructive.\n", hifi ? "is non-" : "may be ");
  157.     Printf(" %ld mixing frequencies between %ld and %ld are available.\n",freqs,minmix,maxmix);
  158.     Printf(" Recording is %ssupported", record ? "" : "not ");
  159.     if(record)
  160.       Printf(" (%s duplex)", fullduplex ? "Full" : "Half");
  161.     Printf(".\n");
  162.     Printf(" This is a %srealtime mode.\n", realtime ? "" : "non-");
  163.    
  164.     Printf("\n");
  165.   }
  166.  
  167.   Printf("No more modes in the audio database.\n");
  168.   cleanup(RETURN_OK);
  169. }
  170.